{ "cells": [ { "cell_type": "markdown", "id": "943e2fe6", "metadata": {}, "source": [ "# **NYISO** - Fuel Mix Over Time " ] }, { "cell_type": "code", "execution_count": 6, "id": "e2de4ef1", "metadata": {}, "outputs": [], "source": [ "import gridstatus\n", "import pandas as pd\n", "import plotly.express as px" ] }, { "cell_type": "code", "execution_count": 7, "id": "96853f00", "metadata": {}, "outputs": [], "source": [ "iso = gridstatus.NYISO()" ] }, { "cell_type": "markdown", "id": "e253e8cd", "metadata": {}, "source": [ "## Get Fuel MIx Data" ] }, { "cell_type": "code", "execution_count": 8, "id": "8feea332", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 59/59 [01:14<00:00, 1.26s/it]\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Fuel CategoryTimeDual FuelHydroNatural GasNuclearOther Fossil FuelsOther RenewablesWind
02017-11-01 00:05:00-04:001815.03291.01594.05402.00.0290.0261.0
12017-11-01 00:10:00-04:001705.03185.01541.05401.00.0285.0259.0
22017-11-01 00:15:00-04:001683.03049.01498.05402.00.0286.0286.0
32017-11-01 00:20:00-04:001612.03022.01488.05402.00.0285.0313.0
42017-11-01 00:25:00-04:001561.02935.01488.05402.00.0287.0296.0
...........................
5251202022-09-30 23:40:00-04:001489.02245.02639.02464.00.0261.098.0
5251212022-09-30 23:45:00-04:001488.02241.02578.02464.00.0263.097.0
5251222022-09-30 23:50:00-04:001489.02237.02581.02463.00.0264.097.0
5251232022-09-30 23:55:00-04:001500.02184.02587.02464.00.0262.099.0
5251242022-10-01 00:00:00-04:001530.02075.02730.02465.00.0262.0103.0
\n", "

525125 rows × 8 columns

\n", "
" ], "text/plain": [ "Fuel Category Time Dual Fuel Hydro Natural Gas \\\n", "0 2017-11-01 00:05:00-04:00 1815.0 3291.0 1594.0 \n", "1 2017-11-01 00:10:00-04:00 1705.0 3185.0 1541.0 \n", "2 2017-11-01 00:15:00-04:00 1683.0 3049.0 1498.0 \n", "3 2017-11-01 00:20:00-04:00 1612.0 3022.0 1488.0 \n", "4 2017-11-01 00:25:00-04:00 1561.0 2935.0 1488.0 \n", "... ... ... ... ... \n", "525120 2022-09-30 23:40:00-04:00 1489.0 2245.0 2639.0 \n", "525121 2022-09-30 23:45:00-04:00 1488.0 2241.0 2578.0 \n", "525122 2022-09-30 23:50:00-04:00 1489.0 2237.0 2581.0 \n", "525123 2022-09-30 23:55:00-04:00 1500.0 2184.0 2587.0 \n", "525124 2022-10-01 00:00:00-04:00 1530.0 2075.0 2730.0 \n", "\n", "Fuel Category Nuclear Other Fossil Fuels Other Renewables Wind \n", "0 5402.0 0.0 290.0 261.0 \n", "1 5401.0 0.0 285.0 259.0 \n", "2 5402.0 0.0 286.0 286.0 \n", "3 5402.0 0.0 285.0 313.0 \n", "4 5402.0 0.0 287.0 296.0 \n", "... ... ... ... ... \n", "525120 2464.0 0.0 261.0 98.0 \n", "525121 2464.0 0.0 263.0 97.0 \n", "525122 2463.0 0.0 264.0 97.0 \n", "525123 2464.0 0.0 262.0 99.0 \n", "525124 2465.0 0.0 262.0 103.0 \n", "\n", "[525125 rows x 8 columns]" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = iso.get_fuel_mix(start=\"Nov 1, 2017\", end=\"Oct 1, 2022\")\n", "df" ] }, { "cell_type": "markdown", "id": "465aca60", "metadata": {}, "source": [ "The call above retried fuel mix data in 5 minute increments. Let's resample the data to monthly" ] }, { "cell_type": "code", "execution_count": 9, "id": "49363e9a", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Fuel CategoryTimeDual FuelHydroNatural GasNuclearOther Fossil FuelsOther RenewablesWind
02017-11-01 00:00:00-04:0018959579.030447482.021914126.044359507.0417465.02459898.05366198.0
12017-12-01 00:00:00-05:0026492744.030399671.026247968.044349267.01426102.02419416.04839025.0
22018-01-01 00:00:00-05:0031903170.027668473.026511086.048802629.03627454.02141482.06163104.0
32018-02-01 00:00:00-05:0015425092.026941421.023025745.039918885.0284680.02007094.05344987.0
42018-03-01 00:00:00-05:0019666517.032764341.022999813.043192132.01491575.02332648.04163407.0
52018-04-01 00:00:00-04:0019699877.030384362.024537954.034689734.0297352.02355395.04523767.0
62018-05-01 00:00:00-04:0024745520.031193895.022509300.041533621.0340653.02278286.03586994.0
72018-06-01 00:00:00-04:0029921618.027057113.025584381.046038444.0204724.02334606.02597822.0
82018-07-01 00:00:00-04:0046345174.027594915.035905445.047102524.01947993.02433483.02486365.0
92018-08-01 00:00:00-04:0050191808.027201483.037326637.045460108.01215035.02452371.02505057.0
\n", "
" ], "text/plain": [ "Fuel Category Time Dual Fuel Hydro Natural Gas \\\n", "0 2017-11-01 00:00:00-04:00 18959579.0 30447482.0 21914126.0 \n", "1 2017-12-01 00:00:00-05:00 26492744.0 30399671.0 26247968.0 \n", "2 2018-01-01 00:00:00-05:00 31903170.0 27668473.0 26511086.0 \n", "3 2018-02-01 00:00:00-05:00 15425092.0 26941421.0 23025745.0 \n", "4 2018-03-01 00:00:00-05:00 19666517.0 32764341.0 22999813.0 \n", "5 2018-04-01 00:00:00-04:00 19699877.0 30384362.0 24537954.0 \n", "6 2018-05-01 00:00:00-04:00 24745520.0 31193895.0 22509300.0 \n", "7 2018-06-01 00:00:00-04:00 29921618.0 27057113.0 25584381.0 \n", "8 2018-07-01 00:00:00-04:00 46345174.0 27594915.0 35905445.0 \n", "9 2018-08-01 00:00:00-04:00 50191808.0 27201483.0 37326637.0 \n", "\n", "Fuel Category Nuclear Other Fossil Fuels Other Renewables Wind \n", "0 44359507.0 417465.0 2459898.0 5366198.0 \n", "1 44349267.0 1426102.0 2419416.0 4839025.0 \n", "2 48802629.0 3627454.0 2141482.0 6163104.0 \n", "3 39918885.0 284680.0 2007094.0 5344987.0 \n", "4 43192132.0 1491575.0 2332648.0 4163407.0 \n", "5 34689734.0 297352.0 2355395.0 4523767.0 \n", "6 41533621.0 340653.0 2278286.0 3586994.0 \n", "7 46038444.0 204724.0 2334606.0 2597822.0 \n", "8 47102524.0 1947993.0 2433483.0 2486365.0 \n", "9 45460108.0 1215035.0 2452371.0 2505057.0 " ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# resample to month start (MS) frequency\n", "data = df.iloc[:-1].set_index(\"Time\").resample('MS').sum().reset_index()\n", "data.head(10)" ] }, { "cell_type": "code", "execution_count": 10, "id": "70533721", "metadata": { "scrolled": false }, "outputs": [ { "data": { "image/svg+xml": "20182019202020212022050M100M150MvariableDual FuelHydroNatural GasNuclearOther Fossil FuelsOther RenewablesWindFuel Mix over Time in NYISODateMegawatts (MW)" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig = px.bar(data[1:-1], x=\"Time\", y=df.columns[1:], title=\"Fuel Mix over Time in NYISO\")\n", "fig.update_layout(\n", " xaxis_title=\"Date\", yaxis_title=\"Megawatts (MW)\"\n", ")\n", "fig.show(\"svg\")" ] }, { "cell_type": "markdown", "id": "45f72223", "metadata": {}, "source": [ "we can also look at percentages over time" ] }, { "cell_type": "code", "execution_count": 11, "id": "f2014df6", "metadata": {}, "outputs": [], "source": [ "percentages = data.set_index(\"Time\")\n", "\n", "percentages = percentages.div(percentages.sum(axis=1), axis=0).reset_index()" ] }, { "cell_type": "code", "execution_count": 12, "id": "20e75cbe", "metadata": {}, "outputs": [ { "data": { "image/svg+xml": "2018201920202021202200.20.40.60.81variableDual FuelHydroNatural GasNuclearOther Fossil FuelsOther RenewablesWindFuel Mix over Time in NYISODatePercent" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig = px.bar(percentages[1:-1], x=\"Time\", y=df.columns[1:], title=\"Fuel Mix over Time in NYISO\")\n", "fig.update_layout(\n", " xaxis_title=\"Date\", yaxis_title=\"Percent\"\n", ")\n", "fig.show(\"svg\")" ] }, { "cell_type": "code", "execution_count": 13, "id": "4cc02f4b", "metadata": {}, "outputs": [ { "data": { "image/svg+xml": "20182019202020212022020M40M60M80MvariableTotal Carbon FreeHydroNuclearWindOther RenewablesCarbon Free Supply over Time in NYISODateMegawatts (MW)" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "carbon_free = [\"Hydro\", \"Nuclear\", \"Wind\", \"Other Renewables\"]\n", "data[\"Total Carbon Free\"] = data[carbon_free].sum(axis=1)\n", "fig = px.line(data, x=\"Time\", y=[\"Total Carbon Free\"] + carbon_free, title=\"Carbon Free Supply over Time in NYISO\")\n", "fig.update_layout(\n", " xaxis_title=\"Date\", yaxis_title=\"Megawatts (MW)\"\n", ")\n", "fig.show(\"svg\")" ] }, { "cell_type": "markdown", "id": "da9442c3", "metadata": {}, "source": [ "## Historical Load" ] }, { "cell_type": "code", "execution_count": 14, "id": "03f3c648", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
TimeLoad
02022-10-23 00:00:00-04:0013422.6794
12022-10-23 00:05:00-04:0013366.5626
22022-10-23 00:10:00-04:0013277.2469
32022-10-23 00:15:00-04:0013208.1183
42022-10-23 00:20:00-04:0013201.6277
.........
2852022-10-23 23:35:00-04:0013487.9588
2862022-10-23 23:40:00-04:0013424.2924
2872022-10-23 23:45:00-04:0013354.7159
2882022-10-23 23:50:00-04:0013310.1781
2892022-10-23 23:55:00-04:0013237.0864
\n", "

290 rows × 2 columns

\n", "
" ], "text/plain": [ " Time Load\n", "0 2022-10-23 00:00:00-04:00 13422.6794\n", "1 2022-10-23 00:05:00-04:00 13366.5626\n", "2 2022-10-23 00:10:00-04:00 13277.2469\n", "3 2022-10-23 00:15:00-04:00 13208.1183\n", "4 2022-10-23 00:20:00-04:00 13201.6277\n", ".. ... ...\n", "285 2022-10-23 23:35:00-04:00 13487.9588\n", "286 2022-10-23 23:40:00-04:00 13424.2924\n", "287 2022-10-23 23:45:00-04:00 13354.7159\n", "288 2022-10-23 23:50:00-04:00 13310.1781\n", "289 2022-10-23 23:55:00-04:00 13237.0864\n", "\n", "[290 rows x 2 columns]" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "iso.get_load(date=\"Oct 23, 2022\")" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3.10.2 64-bit ('gridstatus')", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.2" }, "vscode": { "interpreter": { "hash": "49f14642123d0cc1afa9fa45716ed5f1e915189c28b01efe02a8b7ec3c0a3fce" } } }, "nbformat": 4, "nbformat_minor": 5 }